package mSecretaria;

import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;

import com.sun.org.apache.bcel.internal.generic.DMUL;

import myUtils.DBUtils;
import myUtils.IModelo;
import play.db.DB;
import play.db.jpa.Model;

public class MCidade extends Model implements IModelo {
	
	
	//atributos
	private int codCidade;
	private String uf;
	private String nome;
		

	//métodos de acesso
	public String getUF() {
		return this.uf;
	}

	public void setUF(String uf) {
		this.uf = uf;
	}

	public String getNome() {
		return this.nome;
	}

	public void setNome(String nome) {
		this.nome = nome;
	}

	public int getCodCidade() {
		return this.codCidade;
	}
	
	
	//construtor
	
	public MCidade(int aCodCidade) throws Exception
	{
		ResultSet rs;
		
		String strQuery = "Select * From Cidade Where Cidade.CodCidade = " + aCodCidade;
				
		
		try
		{
			rs = DB.executeQuery(strQuery);
			
			
			if(rs == null)
				throw new Exception("Cidade não cadastrada!");
			
			while (rs.next())
			{
				this.codCidade	= rs.getInt("CodCidade");
				this.nome	    = rs.getString("Nome");
				this.uf		    = rs.getString("uf");
			}
			
		}
		catch(Exception e)
		{
			throw new Exception(e.getMessage());
		}
				
	}
	
	
	public MCidade(String aNome,String aUF)
	{
		this.codCidade = 0;
		this.nome	= aNome;
		this.uf		= aUF;				
	}
	
	private MCidade(int aCodCidade,String aNome,String aUF) throws Exception
	{
		this.codCidade 	= aCodCidade;
		this.nome		= aNome;
		this.uf			= aUF;
		
	}
	
	public static List<MCidade> select(int aCodCidade, String aNome, String aUF) throws Exception
	{
		ResultSet rs;
		String nome,uf;
		int codCidade;
		
		List<MCidade> retorno  = new ArrayList<MCidade>();
		String strQuery = "Select * From Cidade Where Cidade.CodCidade > 0" ;

		if(aCodCidade > 0)
		{
			strQuery += " and Cidade.CodCidade = " + aCodCidade;
		}
		
		if(!aUF.equals(""))
		{
			strQuery += " and Cidade.UF like  '" + aUF + "%'";
		}
		
		strQuery += " and Cidade.Nome Like '" + aNome + "%'"; 
		
		
		try
		{
			rs = DB.executeQuery(strQuery);	
			
			while (rs.next())
			{
				codCidade 	= rs.getInt("CodCidade");
				nome		= rs.getString("Nome");
				uf			= rs.getString("uf");
				
				MCidade cidade = new MCidade(codCidade,nome,uf);
				retorno.add(cidade);
				
			}	
			
		}
		catch(Exception e)
		{
			throw new Exception(e.getMessage() + "\n Comando: " + strQuery);
		}
		
		return retorno;		
		
	}
	
	

	@Override
	public void update() throws Exception {
		
		if(this.codCidade == 0)
		{
			this.insert();
		}
		else
		{
			String strQuery = "Update Cidade set Nome = '" + this.nome + "'";
			strQuery += ", UF = '" + this.uf + "'";
			strQuery += " Where Cidade.CodCidade = " + this.codCidade;
			 
			
			try
			{
				DB.execute(strQuery);			
			}
			catch(Exception e)
			{
				throw new Exception(e.getMessage());
			}
		}
	}

	@Override
	public void excluir() throws Exception {
		
		if(this.codCidade != 0)
		{
			String strQuery = "Delete From Cidade Where Cidade.CodCidade = " + this.codCidade;
			
			try
			{
				DB.execute(strQuery);	
				this.codCidade = 0;
			}
			catch(Exception e)
			{
				throw new Exception(e.getMessage() + "\n Comando: " + strQuery);
			}
		}

	}

	@Override
	public void insert()  {

		ResultSet rs;
		String strQuery2 = "Select CodCidade from Cidade Where Nome = '" + this.nome + "'";
		strQuery2 += " and UF = '" + this.uf + "'";;
		
		String strQuery = "Insert Into Cidade(Nome,UF) Values (";
		strQuery += "'" + this.nome + "'";
		strQuery += ",'" + this.uf + "')";
		
		try
		{
			DB.execute(strQuery);			
			rs = DB.executeQuery(strQuery2);
			
			while(rs.next())
			{
				this.codCidade = rs.getInt("CodCidade");
			}
			
		}
		catch(Exception e)
		{
			//throw new Exception(e.getMessage() + "\n Comando: " + strQuery + " | " + strQuery2);
		}

	}

}
